/**
 * des: 注册全局指令
 * date: 2018/08/16
 * version: v1
 * author: XGP
 */
import Vue from 'vue'
import { getSelected } from '../api/common'
import store from '../../store'
import { Message } from 'element-ui';

// 注册一个全局自定义指令 `v-params`
// 使用示例 <span v-params="'POST'"></span>
/**
 * 参数回显指令
 */
Vue.directive('params', {
  update: function(el, data) {
    const id = data.value.id
    const code = data.value.code
    if (id && code) {
      const cacheParams = store.state.params.params
      /**
       * 如果在缓存中，直接获取缓存中数据
       */
      if (cacheParams[code]) {
        const list = cacheParams[code]
        getParamsName(list, id)
      } else {
        getSelected(code).then(response => {
          getParamsName(response.data.items, id)
          /**
           * 参数缓存
           */
          store.dispatch('addParams', response.data)
        })
      }
    }
    function getParamsName(list, id) {
      list.forEach(v => {
        if (v.itemCode == id) {
          el.textContent = v.itemText
        }
      })
    }
  },
  // 当被绑定的元素插入到 DOM 中时钩子函数
  inserted: function(el, data) {
    const id = data.value.id
    const code = data.value.code
    if (id && code) {
      const cacheParams = store.state.params.params
      /**
       * 如果在缓存中，直接获取缓存中数据
       */
      if (cacheParams[code]) {
        const list = cacheParams[code]
        getParamsName(list, id)
      } else {
        getSelected(code).then(response => {
          getParamsName(response.data.items, id)
          /**
           * 参数缓存
           */
          store.dispatch('addParams', response.data)
        })
      }
    }
    function getParamsName(list, id) {
      list.forEach(v => {
        if (v.itemCode == id) {
          el.textContent = v.itemText
        }
      })
    }
  }
})

/**
 * 点击提示信息指令
 */
Vue.directive('alert', {
  // 当被绑定的元素插入到 DOM 中时钩子函数
  update: function(el, data) {
    el.onclick = () => {
      Message.warning({
        message: data.value
      })
    }
  }
})
